#include <iostream>
// 1

int divide(int a, int b)
{
    if (b == 0)
        //    throw 0;   // 抛出异常，只能被terminate函数接收,提示异常
        throw "除数为0";
    if (b == 1)          // 多分支异常
        throw 1; // 默认int型
    // short s = 1;
    //     throw s; // 明确short才会被short捕获
    if (b == 2)
        throw 3.14;
    return a / b;
}

int main()
{
    try // 尝试执行某些代码
    {
        std::cout << divide(1, 2) << std::endl;
    }
    // 捕获异常:类型必须要严格匹配(const) (short int 也不会当做同一类型)
    catch (char const *str) // (const char* str)
    {
        std::cout << str << std::endl; // 打印异常
    }
    catch (short a)
    {
        std::cout << "short:" << a << std::endl;
    }
    catch (int a) // 捕获不同类型的多分支异常
    {
        std::cout << "捕获Int" << a << std::endl;
    }
    catch(...) // 捕获其他类型的异常  (以上分支均不满足)
    {
        std::cout<<"捕获到其他类型的异常\n";
    }
    std::cout << "继续执行..." << std::endl;
    return 0;
}
